<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<META NAME="GENERATOR" CONTENT="Adobe FrameMaker 7.0/HTML Export Filter">
<LINK REL="STYLESHEET" HREF="KDM_1.0_8_kdm.css" CHARSET="ISO-8859-1" TYPE="text/css">
<TITLE> 8	KDM</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
<DIV>
<H6 CLASS="Heading">
<A NAME="pgfId-998826"></A><A NAME="58728"></A>KDM</H6>
</DIV>
<DIV>
<H3 CLASS="Heading1">
<A NAME="pgfId-1086553"></A>Overview</H3>
<P CLASS="Body">
<A NAME="pgfId-1086630"></A>KDM specifies a comprehensive set of common concepts required for understanding existing software systems in preparation for software assurance and modernization and provides infrastructure to support specialized definitions of domain-specific, application-specific, or implementation-specific knowledge. </P>
<P CLASS="Body">
<A NAME="pgfId-1086631"></A>The structure of KDM is defined by combining dimensions and levels of Knowledge Discovery (refer to <A HREF="KDM_1.0_8_kdm.htm#40136" CLASS="XRef">See - Structure of KDM Packages.</A>).</P>
<P CLASS="Body">
<A NAME="pgfId-1085507"></A>&nbsp;</P>
<DIV>
<IMG SRC="KDM_1.0_8_kdm-1.gif">
</DIV>
<DIV>
<H6 CLASS="FigureCaption1">
<A NAME="pgfId-1086566"></A><A NAME="40136"></A>- Structure of KDM Packages</H6>
<P CLASS="Body">
<A NAME="pgfId-1086649"></A>The KDM contains 12 packages; each package is defined by one or more class diagrams.</P>
<P CLASS="Body">
<A NAME="pgfId-1086650"></A>Core KDM package defines the basic meta-classes (entity, relationship, container hierarchies, etc.) and well-formedness rules of KDM models.</P>
<P CLASS="Body">
<A NAME="pgfId-1086792"></A><A HREF="KDM_1.0_8_kdm.htm#40136" CLASS="XRef">See - Structure of KDM Packages.</A> illustrates the layers of the KDM specification and shows dependencies between KDM packages by arranging packages into a stack. Each package depends on one or more packages at the lower layers of the stack. In particular, each KDM package depends on the Core package. The nature of this dependency is that the meta-elements defined by each package are subclasses of one of the core classes. Also, each package depends on the kdm package. Each KDM package above the kdm package defines a KDM model, which corresponds to a certain facet of knowledge about existing software system. The Kdm package provides the infrastructure for all KDM models. The nature of the dependency on the kdm package is twofold. First, each package defines a subclass of the KDMModel class, defined in the kdm package. Second, each kdm package provides several concrete classes that are instantiated in each KDM representation as part of the infrastructure. kdm package defines several important mechanisms that are used by all KDM models: the annotation mechanism, the mechanism of user-defined attributes and the light-weight extension mechanism. The meta-model elements that support these mechanisms can be instantiated by any KDM model.</P>
<P CLASS="Body">
<A NAME="pgfId-1086814"></A>The Source package and the Code package of the Program Elements Layer represent the most fundamental, primitive knowledge about existing software systems. Most pieces of this knowledge are explicitly represented by the original source code of the existing software system. It is expected that KDM implementations extract this kind of knowledge automatically, for example by implementing a bridge to an existing software development environment. Such bridge provides a mapping from the programming language (or languages) used for the development of the existing software system, to a language-independent KDM representation, that can be further analyzed and transformed by various KDM tools.</P>
<P CLASS="Body">
<A NAME="pgfId-1086815"></A>Packages of the Runtime Resource Layer represent higher-level knowledge about existing software systems. Most pieces of this knowledge are implicitly represented by the original source code of the software system and the corresponding configuration and resource descriptions. This kind of knowledge is determined not by the syntax and semantics of the programming language (or languages) used for the development of the existing software system, but by the corresponding runtime platform. Incremental analysis of the primitive KDM representation may be required to extract and explicitly represent some of these pieces of knowledge. KDM implementations of the corresponding packages define a mapping from the platform-specific artifacts to a language- and platform-independent KDM representation, that can be further analyzed and transformed by various KDM tools.</P>
<P CLASS="Body">
<A NAME="pgfId-1086823"></A>Packages of the Abstractions Layer represent even higher-level abstractions about existing software, such as domain-specific knowledge, business rules, implemented by the existing software system, architectural knowledge about the existing software system, etc. This knowledge is implicit, and often there is no formal representation of such knowledge anywhere in the artifacts of the existing software system (and often, even in the documentation). Extracting this kind of knowledge and part of the integrated KDM representation usually involves input from experts and analysts.</P>
<P CLASS="Body">
<A NAME="pgfId-1086822"></A>KDM representation a is single, integrated repository of different facets of knowledge about the software system.</P>
</DIV>
</DIV>
<DIV>
<H3 CLASS="Heading1">
<A NAME="pgfId-1086652"></A>Organization of the KDM Packages</H3>
<P CLASS="Body">
<A NAME="pgfId-1086654"></A>KDM defines a collection of meta-model elements whose purpose is to represent existing software artifacts as entities and relations.</P>
<P CLASS="Body">
<A NAME="pgfId-1086655"></A>The KDM has the following organization:</P>
<UL>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086656"></A>The Core package defines the basic abstractions of KDM</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086657"></A>The Kdm package provides static context shared by all KDM models</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086658"></A>The Source package defines the inventory of the physical artifacts of the existing software system and references to the source code</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086659"></A>The Code package defines the low-level building blocks of application source files, such as procedures, datatypes, classes, etc. (as determined by a programming language)</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086660"></A>Action package defines end points of relations, and the majority of KDM relations</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086739"></A>Platform package defines artifacts, related to the run time platform of the enterprise application</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086745"></A>UI package defines the user-interface aspects of the application</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086751"></A>Event package defines a common concept related to event-driven programming</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086662"></A>Data package defines the persistent data aspects of an application</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086663"></A>Structure package defines the architectural components of existing application, subsystems, layers, packages, etc.</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086668"></A>Conceptual package defines the domain-specific elements of an application</LI>
<LI CLASS="Bullet1">
<A NAME="pgfId-1086729"></A>Build package defines the artifacts related to engineering of an application</LI>
</UL>
<P CLASS="Body">
<A NAME="pgfId-1086670"></A>&nbsp;</P>
<P CLASS="Body">
<A NAME="pgfId-1086642"></A>&nbsp;</P>
<P CLASS="Body">
<A NAME="pgfId-1086643"></A>&nbsp;</P>
<P CLASS="Body">
<A NAME="pgfId-1082572"></A>&nbsp;</P>
</DIV>
</BODY>
</HTML>
